![]() ブックマークを用いたストリーミングオブジェクトのインスタンス化
专利摘要:
ストリーミングトークンのセット内のトークンをブックマークすることであり、各トークンは、インスタンス化命令またはインスタンス化のコンテキストを表す。ナビゲータは、ストリーミングトークンのセットを受信して、そのトークンをインスタンス化マネージャに渡す。しかしながら、ナビゲータが特定のトークンをブックマークする命令を受信した場合、ナビゲータは、少なくともそのブックマークされるトークンから開始される(先行するブックマークがあった場合、さらに前のトークンから開始される可能性がある)ストリーミング命令のセットをバッファリングする。ナビゲータは、インスタンス化マネージャからの命令に応じてブックマークから開始されるストリーミングトークンのセットを再生する。インスタンス化マネージャは、ストリーミングトークンのセットを受信する。インスタンス化マネージャが特定のトークンの命令を現在処理できない場合、インスタンス化マネージャは、ナビゲータにその特定のトークンをブックマークするように命令する。インスタンス化マネージャが、その後、インスタンス化マネージャがブックマークに戻ることを可能するトークンを受信すると、インスタンス化マネージャは、ブックマークに戻って、そのブックマークから開始されるインスタンス化命令を再生する。 公开号:JP2011510419A 申请号:JP2010544303 申请日:2008-12-29 公开日:2011-03-31 发明作者:リー;アンダーソン クリストファー;シー.シュリマー ジェフリー;デイビッド;ドーティ ジョン;ジェイムズ;ガドジン マーティン 申请人:マイクロソフト コーポレーション; IPC主号:G06F17-30
专利说明:
[0001] 本発明は、ストリーミングオブジェクトのインスタンス化に関する。] 背景技術 [0002] オブジェクトインスタンスは、ストリーミングデータから生成できる。例えば、オブジェクトのインスタンス化マネージャは、さまざまなクラス定義にアクセスできる。ストリーミングデータは、インスタンス化マネージャに特定のクラスのオブジェクトをインスタンス化させる命令を渡す。ストリーミングデータは、さらに、それらのオブジェクトをインスタンス化する方法およびポピュレート(populate)する方法についての命令を渡す。バッファリングせずにストリーミングデータから直接インスタンス化する場合、その命令は、インスタンス化マネージャが命令を受信した時に、各命令に応答するために必要な情報をすべて有する形で書かれなければならない。あるいは、インスタンス化マネージャは、すべての命令が受信されるまでストリーミングデータをバッファリングできる。例えば、マークアップ言語を用いてインスタンス化命令が表される場合、すべてのマークアップ文書はバッファリングされる。] 発明が解決しようとする課題 [0003] 本発明は、ブックマークを用いたストリーミングオブジェクトのインスタンス化を提供することにある。] 課題を解決するための手段 [0004] 本明細書で説明する実施形態は、ストリーミングトークンのセット内のトークンをブックマークすることに関し、各トークンはインスタンス化命令を表す。ナビゲータは、ストリーミングトークンのセットを受信して、そのトークンをインスタンス化マネージャに渡す。しかしながら、インスタンス化マネージャが、ナビゲータに特定のトークンをブックマークするように求めた場合、ナビゲータは、少なくともブックマークされるトークンから開始される(および先行するブックマークがあった場合、さらに前のトークンから開始される可能性がある)ストリーミング命令のセットをバッファリングする。ナビゲータは、インスタンス化マネージャからの命令に応じて、ブックマークから開始されるストリーミングトークンのセットを再生(replay)する。] [0005] インスタンス化マネージャは、ストリーミングトークンのセットを受信する。インスタンス化マネージャが特定のトークンの命令を現在処理できない場合、インスタンス化マネージャは、ナビゲータにその特定のトークンをブックマークするように命令する。インスタンス化マネージャが、その後、インスタンス化マネージャがブックマークに戻ることを可能にするトークンを受信した時、インスタンス化マネージャは、ブックマークに戻ってそのブックマークから開始されるインスタンス化命令を再生する。] [0006] これによって、インスタンス化マネージャが、すべてのインスタンス化命令をバッファリングする必要なく、一群のインスタンス化命令に適切に従うことが可能になる。さらに、インスタンス化マネージャは、トークンを受信した時にすべてのトークンを処理することができなくてもインスタンス化トークンのストリームを処理できる。] [0007] 上述した本発明の概要は、特許請求の範囲に記載の事項の重要な特徴または不可欠な特徴を特定することを意図せず、また、特許請求の範囲に記載の事項の範囲を決めるのに役立つものとして用いられることも意図しない。] [0008] 本発明の上記およびその他の利点および特徴を得ることができる方法を説明するために、本発明の実施形態のより詳細な説明を添付図面で示す。これらの図面は、単に本発明の典型的な実施形態を示すものであり、本発明の範囲を限定するものとは見なされないという理解のもと、添付図面を用いることによって付加的な詳細とともに本実施形態を説明する。] 図面の簡単な説明 [0009] ストリーミングデータを送信するために動作できる例示的なコンピュータシステムを示す図である。 ストリーミングデータを用いてオブジェクトをメモリ内でインスタンス化するソフトウェアアーキテクチャを示す図である。 ナビゲータが、ストリーミングトークンに応じてオブジェクトのインスタンス化を行う方法のフローチャートを示す図である。 ナビゲータにトークンをブックマークさせる方法のフローチャートを示す図である。 ナビゲータに、先行するブックマークからトークンストリームを再生する再生モードに入らせることができる方法のフローチャートを示す図である。 インスタンスマネージャが、ナビゲータからトークンのセットを受信する方法のフローチャートを示す図である。] 実施例 [0010] 本明細書で説明する実施形態に従って、ストリーミングトークンのセット内のトークンをブックマークすることを説明する。ここで、各トークンは、インスタンス化命令を表すか、または少なくともインスタンス化のコンテキストを渡す。ナビゲータは、ストリーミングトークンのセットを受信して、そのトークンをインスタンス化マネージャに渡す。しかしながら、ナビゲータが特定のトークンをブックマークするように求められた場合、ナビゲータは、少なくともブックマークされるトークンから開始される(および先行するブックマークがあった場合、さらに前のトークンから開始される可能性がある)ストリーミング命令のセットをバッファリングする。ナビゲータは、インスタンス化マネージャからの命令に応じて、ブックマークから開始されるストリーミングトークンのセットを再生する。] [0011] まず、一般的なコンピュータシステムについての導入的説明をある程度行った後、図1に関連して基本的なコンピュータシステムを説明する。その後、図2から6に関連して、ストリーミングデータに基づいてオブジェクトをインスタンス化するコンテキストにおいてブックマークを用いるさまざまな実施形態を説明する。] 図1 図2 [0012] コンピュータシステムは、多様な形をとりながら広まっている。コンピュータシステムは、例えば、ハンドヘルドデバイス、電化製品、ラップトップコンピュータ、デスクトップコンピュータ、メインフレーム、分散コンピュータシステム、または標準のコンピュータシステムとは見なされていないデバイスであってもよい。本明細書および特許請求の範囲において、用語「コンピュータシステム」は、少なくとも1つのプロセッサと、プロセッサが実行できるコンピュータ実行可能命令を有することができるメモリとを含む任意のデバイスまたはシステム(またはそれらの組み合わせ)を含むものとして広く定義される。メモリは、任意の形をとってよく、コンピュータシステムの性質および形によって決めてよい。コンピュータシステムは、ネットワーク環境に分散してよく、複数の構成要素を含むコンピュータシステム(multiple constituent computing system)を含んでよい。] [0013] 図1を参照すると、その最も基本的な構成において、コンピュータシステム100は、典型的には、少なくとも1つのプロセッサ102とメモリ104とを含む。メモリ104は、揮発性、不揮発性、またはその2つの或る組み合わせからなる物理システムメモリであってよい。用語「メモリ」は、本明細書において物理記憶媒体などの不揮発性の大容量記憶装置を示すのに用いることもできる。コンピュータシステムが分散された場合、その処理、記憶および/または格納能力も分散できる。本明細書で用いられるように、用語「モジュール」または「コンポーネント」は、コンピュータシステム上で実行するソフトウェアオブジェクトまたはルーチンを示すことができる。本明細書で説明する様々なコンポーネント、モジュール、エンジン、およびサービスを、コンピュータシステム上で実行されるオブジェクトまたはプロセスとして(例えば、個々のスレッドとして)実装できる。] 図1 [0014] 以下の説明において、1または複数のコンピュータシステムによって行われる動作を参照して実施形態を説明する。そのような動作がソフトウェアに実装される場合、その動作を行うことに関連するコンピュータシステムの1または複数のプロセッサは、コンピュータ実行可能命令が実行されたことに応じてコンピュータシステムの動作を導く。そのような動作の例は、データの操作を伴う。コンピュータ実行可能命令(および操作されるデータ)を、コンピュータシステム100のメモリ104に格納できる。] [0015] コンピュータシステム100は、コンピュータシステム100が、例えば、ネットワーク110などの他のコンピュータシステムとの通信を行うことができるようにする通信チャネル108を含むこともできる。通信チャネル108は、通信媒体の例である。通信媒体は、典型的には、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータを、搬送波または他の移送機構などの変調データ信号によって具体化し、任意の情報配信媒体を含む。例を挙げると、通信媒体は、有線ネットワークおよび直接有線接続などの有線媒体と、音響、無線、赤外線などの無線媒体および他の無線媒体とを含むが、これらに限定されない。本明細書で用いられる用語コンピュータ可読媒体は、記憶媒体と通信媒体とを含む。] [0016] 図1において、コンピュータシステム100は、通信チャネル108を経由するストリーミングデータ112の受信を示す。ストリーミングデータ112は、プロセッサ102に、メモリ104内において1または複数のオブジェクトをインスタンス化させるオブジェクトのインスタンス化命令を表す。具体的には、オブジェクト114は、メモリ104の揮発性部においてインスタンス化されるように示されている。オブジェクト114は、ストリーミングデータ112に応じてインスタンス化されていてもよい。ストリーミングデータは、図1に示すネットワーク経由で受信できるが、その他のデータチャネル経由で受信することもできる。例えば、ローカルディスク、メモリスティック、光ディスクドライブなどからストリーミングデータを得ることができる。図2および後続の図を参照して、このプロセスについてさらに詳細に説明するが、これらの例には限定されない。] 図1 図2 [0017] 本発明の範囲における実施形態は、格納されたコンピュータ実行可能命令を実行し、またはデータ構造を有するコンピュータ可読媒体も含む。そのようなコンピュータ可読媒体は、汎用または専用のコンピュータによってアクセスすることができる入手可能な任意の媒体とすることができる。例を挙げると、そのようなコンピュータ可読媒体は、RAM、ROM、EEPROM、CD−ROMなどの物理記憶装置および/またはメモリ媒体、もしくは他の光ディスク記憶装置、磁気ディスク記憶装置もしくは他の磁気記憶装置、またはコンピュータ実行可能命令またはデータ構造の形式で所望のプログラムコード手段を実行しまたは格納するのに用いることができて、汎用または専用のコンピュータによってアクセスすることができるその他の媒体を備えることができるが、これに限らない。ネットワークまたは別の通信接続(有線、無線、または有線もしくは無線の組み合わせのいずれか)を経由してコンピュータに情報を転送しまたは渡す時、そのコンピュータは、その接続をコンピュータ可読媒体として適切に見なす。従って、そのような接続はどれでもコンピュータ可読媒体と適切に呼ばれる。上記の組み合わせもコンピュータ可読媒体の範囲内に含めなければならない。] [0018] コンピュータ実行可能命令は、例えば、汎用コンピュータ、専用コンピュータ、または専用処理デバイスに、或る機能または一群の機能を行わせる命令およびデータを備える。発明の対象事項を、構造的特徴および/または方法論的動作に特有の言語によって説明するが、添付の特許請求の範囲に定義された発明の対象事項は、本明細書で説明される具体的な特徴または動作に必ずしも限定されないことを理解されたい。むしろ、本明細書で説明される具体的な特徴および動作は、特許請求の範囲を実装する例示的な形として開示される。] [0019] 図2は、ストリーミングデータを用いてメモリ内でオブジェクトをインスタンス化するソフトウェアアーキテクチャ200を示す。物理層において、ストリーミングデータは、電気信号または光信号などの或る物理形式によって表される単純なデジタルビット列である。ストリーミングデータ201は、バイナリ1とバイナリ0とから成るバイナリ列として示される。] 図2 [0020] リーダ211は、ハードウェア、ソフトウェア、ファームウェア、またはそれらを組み合わせたもので実装できる。一実施形態では、リーダ211自体が、メモリ内でインスタンス化されたオブジェクトである。リーダ211は、受信したデータストリーム201をトークン202の列に変換するロジックを含む。それぞれのトークンはインスタンス化のコンテキストを表し、一部がインスタンス化命令を表す。] [0021] この変換プロセスは、いくつかのステップにおいて行われる。例えば、データストリーム201によって表されるインスタンス化命令のセットがマークアップ言語文書(例えば、XML(eXtensible Markup Language)文書)の場合、そのトークンは、特定の要素の先頭、特定の要素の終端、要素の中身、要素の属性などを表すことができる。リーダ211は、従って、最初に各ビット列の区分を特定の文字に変換する。例えば、ASCII文字を表すビット列に対して、各ビット列は、8ビットになり得る。しかしながら、ユニコード文字あるいは他の文字セットの場合のように、文字を他のビット列長によっても表すことができる。リーダ211は、次に文字ストリームを解析して、階層的なマークアップ言語文書の論理部分を表す論理セクション(すなわち、トークン)を見つけることができる。リーダ211は、フロー制御およびバッファリングの制限を任意に行ってトークンストリーム202を渡すこともできる。] [0022] ナビゲータ212も、コンポーネントとしてハードウェア、ソフトウェア、ファームウェア、またはそれらを組み合わせたもので実装できる。一実施形態では、ナビゲータ212自体が、メモリ内でインスタンス化されたオブジェクトとすることができる。ナビゲータ212は、リーダ211からトークン202を受信する。リーダ211は、プッシュ形式によってトークン202をナビゲータ212に渡すことができる。しかしながら、バッファリング要件を減らすまたは無くすために、以下で詳細に説明するさまざまな例において、ナビゲータ212は、各トークンの明示的なナビゲータ要求に応じて、プル形式によってリーダ211からトークンを一つずつ受信する。] [0023] ナビゲータ212は、ナビゲータにトークンストリーム203をブックマークさせることを可能にするブックマーキング機構(BM)205を含む。ナビゲータ212は、トークンストリーム203を、実質的にメモリ214内でオブジェクトをインスタンス化するインスタンス化マネージャ213に渡す。インスタンス化マネージャ213に渡されたトークンストリーム203内にあるトークンは、ナビゲータ212に渡されたトークンストリーム202内にあるトークンと同じである。しかしながら、以下で説明するように、ブックマーキング機構205によって、これらのトークンを、トークンストリーム202と比べて異なる順序でトークンストリーム203内に渡すことができる。インスタンス化マネージャ213は、ブックマークが、トークンストリーム202においてナビゲータ212によって生成されるようにすることができる。各ブックマークは、後で戻る特定のトークンを表し、ブックマークされたトークンから開始されるトークンストリームの再生をシミュレートする。ナビゲータ212は、バッファ206内にブックマークから開始されるトークンストリームをバッファリングすることによって、そのトークンストリームを再生できる。バッファされたトークンストリームは、後で、ブックマークが解放(release)された時に解放されて、そのトークンストリームはバッファから再生される。] [0024] インスタンス化マネージャ213は、トークンストリーム202によって表され、ナビゲータ212から受信するインスタンス化命令に応じて、メモリ214内でオブジェクトを実質的にインスタンス化する。インスタンス化マネージャ213が戻ってトークンストリームの先行する部分を再生できるので、用語「トークンストリーム」は、ナビゲータ212からインスタンス化マネージャ213に渡されるトークン列に関して広い意味に用いられる。インスタンス化マネージャ213も、ハードウェア、ソフトウェア、またはそれらを組み合わせたもので実装でき、メモリ内、恐らくはオブジェクトをインスタンス化する同じメモリ214内でインスタンス化されるオブジェクトとすることもできる。] [0025] インスタンス化マネージャ213は、一群のクラス定義204にアクセスできる。例示において、インスタンス化マネージャ213は、3つの特定のクラス定義204A、204B、204Cにアクセスできる。しかしながら、インスタンス化マネージャ213は、省略記号204Dを用いて象徴的に表されているように、任意の数(1または複数)のクラス定義にアクセスし得る。インスタンス化マネージャ213は、メモリ214内で任意の数のオブジェクトをインスタンス化できる。例えば、インスタンス化マネージャは、メモリ内で3つのオブジェクト205A、205B、205Cをインスタンス化しているように示されている。しかしながら、インスタンス化マネージャ213は、省略記号205Dによって表されているように、メモリ内で任意の数のオブジェクトをインスタンス化できる。オブジェクトインスタンスは、そのオブジェクトに対応するクラス定義に従ってメモリ内で割り当てることができる。] [0026] 図3に、ナビゲータが、ストリーミングトークンに応じてオブジェクトのインスタンス化を行うための方法300のフローチャートを示す。方法300は、ナビゲータが、インスタンス化マネージャがトークンストリーム内の次のトークンに対して準備ができていると判断する度に行われる(動作301)。トークンストリーム内の各トークンは、インスタンス化マネージャの或るインスタンス化のコンテキストを表すことを思い起こしていただきたい。] 図3 [0027] ナビゲータからインスタンス化マネージャに渡されるトークンストリームは、生の(live)トークンストリームとすることができ、この場合、ナビゲータは、トークンをリーダから受信するとそのままトークンを渡す。一方、トークンストリームは、再生モードにすることもでき、その場合、ナビゲータは、トークンを、そのバッファからインスタンス化マネージャに渡す。特定のトークンストリーム内の第1トークンに対して、トークンストリームは生(判定ブロック302の“Live”)になる。] [0028] 生のトークンストリーム(判定ブロック302の“Live”)の場合、ナビゲータは、リーダからストリームの次のトークンを得る(動作303)。プル機構において、ナビゲータは、リーダからの次のトークンの明示的な要求を行うことができ、その要求への応答としてトークンを受信する。トークンストリーム内に先行するブックマークセットがある場合(判定ブロック304の“はい”)、ナビゲータは、リーダからトークンを得るとすぐにバッファリングし(動作305)、さらにトークンをインスタンス化マネージャに渡す(動作306)。バッファリングに先行してトークンをインスタンス化マネージャに渡すことも可能である。従って、動作305と306とに対して相対的なタイミング要件はない。トークンストリーム内に先行するブックマークセットがない場合(判定ブロック304の“いいえ”)、ナビゲータは、トークンをバッファリングせずにインスタンス化マネージャに渡す(動作306)。] [0029] 一実施形態において、バッファ206は、個々に連結されたリスト(singly linked list)として実装され、バッファ内の各トークンが、個々に連結されたリスト内のノードに関連して開始される。個々に連結されたリスト内の最後のノードを除いて、各ノードは、リスト内の次のノードへのリンクも含む。トークンストリームを使用するすべてのブックマークは、連結されたリストを共有する。生のトークンストリーム(判定ブロック302の“Live”)の場合において、先行するブックマークセットがない場合(判定ブロック304の“いいえ”)、バッファ内にトークンはなく、連結されたリストはゼロ長(length of zero)を有する。一方、生のトークンストリーム(判定ブロック302の“Live”)の場合において、先行するブックマークセットがある(判定ブロック304の“はい”)場合、トークンは、リスト内に付加的なノードを生成することによって個々に連結されたリストに付加されて、リスト内の以前の最後のノードを、新しく生成された付加的なノードに連結する。] [0030] 一方、再生トークンストリーム(判定ブロック302の“Replay”)の場合、ナビゲータは、リーダから次のトークンを得るのではなく、バッファから次のトークンを渡す(動作307)。トークンストリーム内に先行するブックマークがある場合(判定ブロック308の“はい”)、ナビゲータは、バッファからのトークンをインスタンス化マネージャに渡す(動作306)。トークンストリーム内に先行するブックマークがない場合(判定ブロック308の“いいえ”)、ナビゲータは、トークンをインスタンス化マネージャに渡す(動作306)前、同時および/または後に、そのトークンのバッファに関連するメモリを自由に空にすることができる(しかし、必ずしも必要ではない)(動作309)。連結リストの実施形態において、ナビゲータは、バッファからのトークンを再生すると、連結リスト内の次のトークンに対する再生を生じさせたブックマークを進める(advance)。そのブックマークが、連結リスト内で一番初めのブックマークである場合、そのブックマークは、二度とアクセスされない過去のトークンを進める。ガーベジコレクションモジュールは、連結リスト内のそのような未使用のモジュールを周期的に検出でき、それらのトークンを連結リストから除去できる。] [0031] 図4に、ナビゲータにトークンをブックマークさせる方法400のフローチャートを示す。具体的には、特定のトークンをブックマークする要求をインスタンス化マネージャから受信した(動作401)後にブックマークが開始される。ナビゲータは、次に、トークンをブックマークして(動作402)、さらにそのトークンのバッファリングを開始する(動作403)。もちろん、このブックマーキングは、ブックマークが実施される間に受信された後続のトークンについての、図3の方法300のフローに作用する。] 図3 図4 [0032] 図5に、ナビゲータを、先行するブックマークからのトークンストリームを再生する再生モードに入らせることができる方法500のフローチャートを示す。具体的には、ナビゲータは、ブックマークされた特定のトークンから開始されるストリーミングトークンを再生する要求をインスタンス化マネージャから受信する(動作501)。ナビゲータは、その後、インスタンス化マネージャに渡されるべき次のトークンとして、ブックマークされたトークンに戻ることによって再生モードに入る(動作502)。] 図5 [0033] 図6に、ナビゲータからトークンのセットを受信するインスタンス化マネージャに関する方法600のフローチャートを示す。インスタンス化マネージャがナビゲータからトークンを受信する(動作601)度に、方法600が開始される。最初に、インスタンス化マネージャは、受信した命令によって表された任意のインスタンス化命令を現在実行できるか否かを判断する(判定ブロック602)。] 図6 [0034] インスタンス化マネージャが現在インスタンス化命令を実行できる場合(判定ブロック602の“はい”)、インスタンス化マネージャは、そのインスタンス化命令を実行する(動作603)。さらに、先行するブックマークされたトークンがあり、インスタンス化命令が、インスタンス化マネージャに先行するブックマークされたインスタンス化トークンを実行させることができる場合(判定ブロック605の“はい”)、インスタンス化マネージャは、その先行するブックマークされたトークンから開始されるトークンを再生する(動作606)。例えば、インスタンス化マネージャは、再生命令をナビゲータに渡すことができ、ナビゲータに図5の方法500を実行させることができる。そうでない場合(判定ブロック605の“いいえ”)、インスタンス化マネージャは、ナビゲータに、次のトークンに対して準備ができていることを任意に通知しながら次のトークンを単に待つ(動作607)。] 図5 [0035] インスタンス化マネージャが現在インスタンス化命令を実行できない場合(判定ブロック602の“いいえ”)、インスタンス化マネージャは、現在のトークンをブックマークする(動作608)。例えば、インスタンス化マネージャは、ナビゲータがトークンをブックマークすることを要求することができ、ナビゲータに図4の方法400を実行させることができる。インスタンス化マネージャは、その後、次のトークンを待つ(動作607)。] 図4 [0036] このように、本明細書で説明する実施形態は、インスタンス化マネージャが特定のトークンにすぐに応答できない場合に、トークンストリームが再生(replay)されることを可能にする。インスタンス化マネージャは、そのトークンをブックマークし、そのブックマークされたトークンによって渡されたインスタンス化のコンテキストを受信する準備ができた時に、そのトークンから開始されるストリームの再生に戻ることできる。] [0037] 特に具体的な2つの例を説明する。具体的な各例において、クラス定義はC#で行う。また、特定のトークンストリームと、関連する階層的なマークアップ言語文書とを示し、具体的な実施形態に従ってどのようにトークンが処理されるかを説明する。これらの例は、単に例示目的として示す。第1例は、1つのレベルのブックマーキングのみを説明する単純なものである。この第1例を、「単一ブックマーク(single bookmark)」例と呼ぶ。第2例はより複雑であり、ブックマーキングのいくつかの階層を示す。本明細書では、「複数ブックマーク(multiple bookmark)」例と呼ぶ。] [0038] 単一ブックマーク例では、その目的は、以下の定義に従ったクラスのオブジェクトインスタンスを生成することである。 public class Monster { public int SizeInMeters{get;set;} public string Name{get;set;} }] [0039] Monsterオブジェクトの構造は、TWeapon型引数に依存するので、Monsterクラスは、Monsterクラスを均等に割り当てるために型引数TWeaponを要求する標準クラスである。以下は、一群のインスタンス化命令の非直列化形式(deserialized form)の例である。 100 Fire Godzilla ] [0040] リーダによってビットストリームから抽出された対応するトークン列を以下のように表す。 1 StartElement: Monster 2 StartElement: Monster.SizeInMeters 3 Text: 100 4 EndElement: Monster.SizeInMeters 5 StartElement: x:TypeArguments 6 Text: Fire 7 EndElement: x:TypwArguments 8 StartElement: Monster.Name 9 Text: Godzilla 10 EndElement: Monster.Name 11 EndElement: Monster] [0041] トークン1は、ナビゲータからインスタンス化マネージャに渡される。しかしながら、インスタンス化マネージャは、型引数TWeaponを認識していないので、まだMonsterオブジェクトを生成することができない。本例においてMonsterクラスは標準クラスなので、オブジェクトの構造を認識していても型引数が必要であることを思い起こしていただきたい。オブジェクトの構造をまだ認識していないので、インスタンス化マネージャは、ナビゲータにトークン1をブックマークさせ、その後すぐにナビゲータがトークン1をバッファリングする。その後、ナビゲータは、トークン2,3および4をインスタンス化マネージャに渡して、同様にナビゲータはこれらのトークンもバッファリングする。インスタンス化マネージャは、モンスターオブジェクトがまだ生成されてなくて、これらのトークンに従うにはモンスターオブジェクトの存在が必要であるので、トークン2−4にまだ対処することができない。] [0042] ナビゲータは、次に、インスタンス化マネージャにトークン5“StartElement: x:TypeArguments”を渡して、モンスターオブジェクトを生成するのに必要な型引数を受信しようとしていることをインスタンス化マネージャに合図する。] [0043] ナビゲータは、次に、トークン6“Text: Fire”をインスタンス化マネージャに渡して、モンスタークラスの型引数が“Fire”であることを知らせる。この時点で、あるいはインスタンス化マネージャがトークン7“EndElement: x:TypeArguments”を受信した後で、インスタンス化マネージャは、型引数が“Fire”であることを認識する。インスタンス化マネージャは、ナビゲータに、先行するブックマークであるトークン1から再生するように命令する。] [0044] インスタンス化マネージャが再度トークン1を受信すると、モンスターオブジェクトが生成される。しかしながら、インスタンス化マネージャは、型引数は“Fire”になることを認識している。従って、インスタンス化マネージャは、Monster<Fire>オブジェクトを生成する。この段階で、バッファを用いるブックマークは1つだけであり、そのブックマークがバッファ内のトークン2に進んでいるので、トークン1をバッファから解放できる。] [0045] その後、トークン2“StartElement: Monster.SizeInMeters”がナビゲータのバッファから再生されると、インスタンス化マネージャは、Monster<Fire>オブジェクトのSizeInMetersプロパティに書き込む準備をする。この段階で、トークン2はバッファから解放されるが、必ずしも必要ではない。例えば、ブックマークを、個々に連結されたバッファのリスト表示内のトークン3に進めることができる。その後で、ガーベジコレクションモジュールは、連結リスト内のトークン1および2を表すノードがもはや使われていないことを検出する。] [0046] トークン3“Text: 100”が再生されると、インスタンス化マネージャは、値“100”をMonster<Fire>オブジェクトのSizeInMetersプロパティに書き込む。トークン3は、次に、バッファから廃棄される。] [0047] その後、トークン4“EndElement: Monster.SizeInMeters”がナビゲータのバッファから再生されると、インスタンス化マネージャは、SizeInMetersプロパティへの書き込みが完了したことを認識する。トークン4は、次に、バッファから廃棄される。] [0048] ナビゲータのバッファからトークン5から7までが再生されると、インスタンス化マネージャは、型引数がすでに設定されているので何も動作を起こす必要はないが、実際は、Monster<Fire>オブジェクトが生成される前に動作が要だった。トークン5から7までがバッファから廃棄される。] [0049] トークン8“StartElement: Monster.Name”がインスタンス化マネージャによって受信されると、ナビゲータが今はそのバッファからではなく(今空である)、ビットストリームにアクセスするリーダからトークンを渡しているので、我々は、再生モード(replay mode)を終了させて生のモード(live mode)に入る。インスタンス化マネージャは、Monster<Fire>オブジェクトのNameプロパティに書き込む準備をする。] [0050] トークン9“Text:Godzilla”が、インスタンス化マネージャによって受信されると、値“Godzilla”は、Monster<Fire>オブジェクトのNameプロパティに書き込まれる。] [0051] トークン10“EndElement: Monster.Name”によって、インスタンス化マネージャは、Nameプロパティへの書き込みが完了したことを認識する。] [0052] トークン11“EndElement: Monster”によって、インスタンス化マネージャは、Monster<Fire>オブジェクトの生成およびポピュレーティング(populating)が完了したことを認識する。] [0053] このように、単一ブックマークの例では、インスタンス化マネージャは、トークンをブックマークすることが可能であったので、そのブックマークされたトークンに応じる適切なコンテキストがあった場合、インスタンス化マネージャを後でそのトークンに戻らせることができる。一部のバッファリングが行われたが、すべてのインスタンス化命令のセットはバッファリングされなかった。] [0054] 次の例は、複数ブックマークの例である。この具体例において、3つの相対的なクラス定義があり、1つはCity、1つはCountry、そして新しい1つはMonsterであり、以下のとおりC#で書き込まれる。 public class City { public City(Country country); public string Name{get;set;} public string Population{get;set;} } public class Country { public string Name{get;set;} } public class Monster { public Monster(City home); public int SizeInMeters{get;set;} public Color SkinColor{get;set;} }] [0055] ここに、我々が非直列化したいマークアップ言語がある。本例において、x:ConstructorArgumentsは、オブジェクトを生成するコンストラクタに渡されるオブジェクトの直列化(serialization)を含むことに留意されたい。 100 <City> Tokyo 12800000 Japan Green ] [0056] 以下は、トークン列の表示である。 1 StartElement: Monster 2 StartElement: Monster.SizeInMeters 3 Text: 100 4 EndElement: Monster.SizeInMeters 5 StartElement: x:ConstructorArguments 6 StartElement:City 7 StartElement: City.Name 8 Text: Tokyo 9 EndElement: City.Name 10 StartElement: City.Population 11 Text: 12800000 12 EndElement: City.Population 13 StartElement: x:ConstructorArguments 14 StartElement: Country 15 StartElement: Country.Name 16 Text: Japan 17 EndElement: Country.Name 18 EndElement: Country 19 EndElement: x:ConstructorArguments 20 EndElement: City 21 EndElement: x:ConstructorArguments 22 StartElement: Monster.SkinColor 23 Text: Green 24 EndElemnet: Monster.SkinColor 25 EndElement: Monster] [0057] ナビゲータは最初に、トークンストリームの第1トークン1に対して準備ができているかを判断する。ナビゲータを動作させるインスタンス化マネージャの実施形態において、ナビゲータは、インスタンス化マネージャから可能標識(ready indicator)を受信できる。別の実施形態では、恐らくナビゲータが、インスタンス化マネージャから単に“Not Ready”標識を受信しないことによって、インスタンス化マネージャがトークンストリームの第1トークン1に対して準備ができているとナビゲータに思い込ませることができる。あるいは、ナビゲータは、インスタンス化マネージャとの通信を全く行わなくても、インスタンス化マネージャは常に準備ができていると単に思い込ませる場合もある。] [0058] ナビゲータは、インスタンス化マネージャが準備できていると判断すると、リーダにトークン列から第1トークンを得てくるように命令する。リーダは、トークン1StartElement: Monsterをナビゲータに渡す。ナビゲータが今、トークンストリームを生でインスタンス化マネージャに渡しているので、ナビゲータは、トークン1StartElement: Monsterをインスタンス化マネージャに渡す。] [0059] インスタンス化マネージャは、Cityコンストラクタ引数を要求するMonsterクラスを参照する。しかしながら、インスタンス化マネージャは、そのCityコンストラクタ引数をまだ有していない。従って、インスタンス化マネージャは、トークン1によって表されたインスタンス化命令をまだ実行することができない。インスタンス化マネージャは、ナビゲータにトークン1をブックマークするように命令する。本例では複数のブックマークが使用されるので、これを「第1」ブックマークと呼ぶ。ナビゲータは、第1ブックマークをトークン1StartElement: Monsterにおいて保持し、トークン1をバッファリングする。ナビゲータは、そのブックマークが解放されるまで後続のトークンをバッファリングし続ける。インスタンス化マネージャは、インスタンス化マネージャにブックマークに戻ることができるようにするイベント、すなわちMonsterクラス(すなわち、Cityオブジェクト)のすべてのコンストラクタ引数が生成されたというイベントに気付くこともできる。] [0060] ナビゲータは、次に、リーダにビットストリームから次のトークンを得てくるように命令する。リーダは、トークン2StartElement: Monster.SizeInMetersをナビゲータに渡す。ナビゲータは、トークン1とともにこのトークンをバッファリングして、トークン2StartElement: Monster.SizeInMetersをインスタンス化マネージャに渡す。インスタンス化マネージャは、コンストラクタ引数がまだ必要であるので、トークン1をまだ処理することができない。] [0061] ナビゲータは、リーダにビットストリームから次のトークンを得てくるように命令する。リーダは、トークン3Text: 100をナビゲータに渡す。ナビゲータは、トークン1−3をバッファリングして、トークン3Text: 100をインスタンス化マネージャに渡す。この時点ではMonsterオブジェクトすら生成されていないので、インスタンス化マネージャは、まだ動作を起こすことができない。このプロセスは、トークン4EndElement: Monster.SizeInMetersでも繰り返す。] [0062] ナビゲータは、リーダにビットストリームから次のトークンを得てくるように命令する。リーダは、トークン5StartElement: x:ConstructorArgumentsをナビゲータに渡す。ナビゲータは、トークン1−5をバッファリングして、トークン5StartElement: x:ConstructorArgumentsをインスタンス化マネージャに渡す。この時点ではMonsterオブジェクトすら生成されていないので、インスタンス化マネージャは、まだ動作を起こすことができない。インスタンス化マネージャは、コンストラクタオブジェクトを生成する準備を任意にする。] [0063] ナビゲータは、リーダにビットストリームから次のトークンを得てくるように命令する。リーダは、トークン6StartElementCityをナビゲータに渡す。ナビゲータは、トークン1−6をバッファリングして、トークン6StartElement Cityをインスタンス化マネージャに渡す。この時点ではMonsterオブジェクトすら生成されていないので、インスタンス化マネージャは、トークン1の第1ブックマークに対してまだ動作を起こすことができない。さらにトークン6は、インスタンス化マネージャにCityオブジェクトをインスタンス化するように命令する。インスタンス化マネージャは、Cityクラスを参照するが、Countryコンストラクタが必要であるのでCityオブジェクトをまだインスタンス化することができない。従って、インスタンス化マネージャは、ナビゲータに、トークン6StartElement: Cityのさらに別のブックマーク(「第2」ブックマーク)を生成するように命令する。従って、今トークンストリーム内に、トークン1StartElement: Monsterの第1ブックマークと、トークン6StartElement Cityの第2ブックマークとの2つのブックマークがある。ナビゲータは、次に、第2ブックマークを生成する。インスタンス化マネージャは、インスタンス化マネージャに第2ブックマークに戻ることができるようにするイベント、すなわちCountryオブジェクトが生成されてポピュレートされるイベントにも気付くことができる。] [0064] ナビゲータは、リーダにビットストリームから次のトークンを得てくるように命令する。リーダは、トークン7StartElement:City.Nameをナビゲータに渡す。ナビゲータは、トークン1−7をバッファリングして、トークン7StartElement: City.Nameをインスタンス化マネージャに渡す。この時点ではMonsterオブジェクトすら生成されていないので、インスタンス化マネージャは、トークン1StartElement: Monsterの第1ブックマークに対してまだ動作を起こすことができない。さらに、Countryコンストラクタ引数が必要であるのでCityオブジェクトがまだ生成されていないことから、インスタンス化マネージャは、トークン6StartElement Cityの第2ブックマークに対して動作を起こすことができない。このプロセスは、トークン8Text Tokyo、トークン9EndElement City.Name、トークン10StartElement: City.Population、トークン11Text: 12800000、およびトークン12EndElement City.Populationでも繰り返す。各トークンは、ナビゲータから生のトークンストリームとしてインスタンス化マネージャに渡されて、各々がナビゲータによってバッファリングされるが、MonsterオブジェクトとCityオブジェクトとがまだ生成されていないので、インスタンス化マネージャは、トークンに対して何もすることができない。] [0065] ナビゲータがトークン13StartElement: xConstructor Argumentsをインスタンス化マネージャに渡すと、インスタンス化マネージャは、Cityクラスのコンストラクタ引数が渡されようとしていることを合図される。この段階では、ナビゲータは、トークン1−13をバッファリングする。] [0066] ナビゲータは、リーダにビットストリームから次のトークンを得てくるように命令する。リーダは、トークン14StartElement: Countryをナビゲータに渡す。ナビゲータは、トークン1−14をバッファリングして、トークン14StartElement: Countryをインスタンス化マネージャに渡す。インスタンス化マネージャは、このトークンによってCountryオブジェクトをインスタンス化するように命令される。Countryクラスが参照される。Countryオブジェクトを割り当てることができる前に必要なコンストラクタ、型引数、または他の情報はない。従って、インスタンス化マネージャは、Countryオブジェクトを、Countryクラスによって定義されたようにメモリ内に割り当てる。] [0067] ナビゲータは、リーダにビットストリームから次のトークンを得てくるように命令する。リーダは、トークン15StartElement: Country.Nameをナビゲータに渡す。ナビゲータは、トークン1−15をバッファリングして、トークン15StartElement: Country.Nameをインスタンス化マネージャに渡す。インスタンス化マネージャは、新しくインスタンス化されたCountryオブジェクトのNameプロパティに値を書き込む準備をする。] [0068] ナビゲータは、リーダにビットストリームから次のトークンを得てくるように命令する。リーダは、トークン16Text: Japanをナビゲータに渡す。ナビゲータは、トークン1−16をバッファリングして、トークン16Text: Japanをインスタンス化マネージャに渡す。インスタンス化マネージャは、値“Japan”をCountryオブジェクトのNameプロパティに書き込む。] [0069] リーダは、トークン17EndElement: Country.Nameをナビゲータに渡す。ナビゲータは、トークン1−17をバッファリングして、トークン17をインスタンス化マネージャに渡す。インスタンス化マネージャは、CountryオブジェクトのNameプロパティへの書き込みが今完了したことを通知する。] [0070] リーダは、トークン18EndElement: Countryをナビゲータに渡す。ナビゲータは、トークン1−18をバッファリングして、トークン18をインスタンス化マネージャに渡す。インスタンス化マネージャは、Countryオブジェクトのインスタンス化およびポピュレーションが今完了したことに気付く。インスタンス化マネージャは、今Cityオブジェクトのコンストラクタとして用いるCountryオブジェクトを有し、今からCityオブジェクトを生成し得る。これは、インスタンス化マネージャに第2ブックマークに戻ることができるようにするイベントである。インスタンス化マネージャは、ナビゲータに、トークン6の第2ブックマークである最後のブックマークから開始されるトークンストリームを再生するように命令する。第2ブックマークは、次に、除去されて、トークン1StartElement: Monsterの第1ブックマークのみを残す。] [0071] リーダからの情報を要求せずに、ナビゲータは、そのバッファからトークン6StartElement:Cityをインスタンス化マネージャに渡す。インスタンス化マネージャは、Cityクラスのすべてのコンストラクタ引数を有していることに気付くので、Cityオブジェクトをインスタンス化する。インスタンス化マネージャは、たとえCityオブジェクトがインスタンス化されていても、Monsterオブジェクトのコンストラクタ引数として用いるのには準備がまだ十分でないので、トークン1をまだ処理することができない。] [0072] ナビゲータは、次に、そのバッファからトークン7StartElement:City.Nameをインスタンス化マネージャに渡す。インスタンス化マネージャは、CityオブジェクトのNameフィールドに書き込む準備をする。] [0073] ナビゲータは、次に、そのバッファからトークン8Text: Tokyoをインスタンス化マネージャに渡す。インスタンス化マネージャは、CityオブジェクトのNameフィールドの値として“Tokyo”を書き込む。] [0074] ナビゲータは、次に、そのバッファからトークン9EndElement:City.Nameをインスタンス化マネージャに渡す。インスタンス化マネージャは、Nameプロパティの値の書き込み動作が完了したことに気付く。] [0075] ナビゲータは、次に、そのバッファからトークン10StartElement:City.Populationをインスタンス化マネージャに渡す。インスタンス化マネージャは、CityオブジェクトのPopulationフィールドに値を書き込む準備をする。] [0076] ナビゲータは、次に、そのバッファからトークン11Text: 12800000をインスタンス化マネージャに渡す。インスタンス化マネージャは、CityオブジェクトのPopulationプロパティに値“12800000”を書き込む。] [0077] ナビゲータは、次に、そのバッファからトークン12EndElement:City.Populationをインスタンス化マネージャに渡す。インスタンス化マネージャは、Populationプロパティの書き込み動作が完了したことに気付く。] [0078] ナビゲータは、次に、そのバッファからトークン13StartElement: x:ConstructorArgumentsをインスタンス化マネージャに渡す。インスタンス化マネージャは、コンストラクタ引数(複数可)を用いてCityオブジェクトをポピュレートする準備をする。] [0079] ナビゲータは、次に、そのバッファからトークン14StartElement: Countryをインスタンス化マネージャに渡す。インスタンス化マネージャは、すでにCountryオブジェクトを生成させているので、そのCountryオブジェクトを用いてCityオブジェクトをポピュレートする。] [0080] ナビゲータは、そのバッファからトークン列14−18をインスタンス化マネージャに渡す。しかしながら、インスタンス化マネージャは、Countryオブジェクトがすでに生成されていたので、これらのトークンに要求された動作をすでに行っている。従って、トークン14−18に要求される特定の動作はない。一実施形態において、特定のトークンに対して動作が行われると、そのトークンは完了したことをフラグで合図して、そのトークンストリームがインスタンス化マネージャに対して再生された時、ナビゲータがそのトークンを渡さないようにできる。この場合では、例えば、トークン14−18は、フラグで合図することが可能である。あるいは、インスタンス化マネージャは、フラグを見ても何も動作を起こさない場合もある。] [0081] ナビゲータは、次のトークン(トークン19)をインスタンス化マネージャに送信する準備をする。しかしながら、この段階では、ナビゲータは、トークン1−18までしかバッファリングしていない。従って、ナビゲータは、再生モードを終了して、再度生のモードに入る。従って、ナビゲータは、リーダからの次のトークンを要求する。リーダは、トークン19EndElement: ConstructorArgumentsをナビゲータに渡す。ナビゲータは、(先行するブックマークがまだあるので)トークン1−19をバッファリングして、トークン19をインスタンス化マネージャに渡す。インスタンス化マネージャは、Cityオブジェクトのコンストラクタ引数が完了したことに気付く。] [0082] リーダは、トークン20EndElement:Cityをナビゲータに渡す。ナビゲータは、トークン1−20をバッファリングして、トークン20をインスタンス化マネージャに渡す。インスタンス化マネージャは、Cityオブジェクトが今完了したことに気付く。Cityオブジェクトが完了したので、インスタンス化マネージャは、Cityオブジェクトをコンストラクタ引数として要求したトークン1に対処する準備が今できている。インスタンス化マネージャは、第1ブックマークに戻る対応もできていることに気付くことができる。インスタンス化マネージャは、ナビゲータに最後のブックマークから再生するように命令する。トークン6の第2ブックマークがすでに削除されているので、最後のブックマークは、トークン1StartElement: Monsterの第1ブックマークである。] [0083] ナビゲータは、トークン1から再生して、第1トークンを削除する。ナビゲータは、そのバッファからトークン1StartElement: Monsterをインスタンス化マネージャに渡す。インスタンス化マネージャは、Monsterクラスを参照し、今Monsterクラスのすべてのコンストラクタ引数(すなわち、Cityオブジェクト)を含むことに気付き、よって、Monsterオブジェクトを割り当てる。任意には、トークンストリーム内にこれ以上ブックマークがないので、ナビゲータは、トークンをインスタンス化マネージャに渡すと、各トークンをそのバッファから解放できる。あるいは、ナビゲータは、バッファの再生が完了した時点ですべてのバッファを解放することもでき、ナビゲータは、トークンストリーム内にブックマークが残ってない生のモードに再度入る。] [0084] ナビゲータは、そのバッファからトークン2StartElement: Monster.SizeInMetersをインスタンス化マネージャに渡す。インスタンス化マネージャは、MonsterオブジェクトのSizeInMetersプロパティに値を書き込む準備をする。任意には、次いで、トークン2はバッファから解放されるが、上述したように、バッファを後で開放することもできる。] [0085] ナビゲータは、そのバッファからトークン3Text: 100をインスタンス化マネージャに渡す。インスタンス化マネージャは、MonsterオブジェクトのSizeInMetersプロパティに値“100”を書き込む。] [0086] ナビゲータは、そのバッファからトークン4EndElement: Monster.SizeInMetersをインスタンス化マネージャに渡す。インスタンス化マネージャは、MonsterオブジェクトのSizeInMetersプロパティへの書き込みが完了したことに気付く。] [0087] ナビゲータは、そのバッファからトークン5StartElement: x:ConstructorArgumentsをインスタンス化マネージャに渡す。インスタンス化マネージャは、コンストラクタ引数(複数可)を用いてMonsterオブジェクトをポピュレートする準備をする。] [0088] ナビゲータは、そのバッファからトークン6StartElementCityをインスタンス化マネージャに渡す。インスタンス化マネージャは、Cityオブジェクトを用いてMonsterオブジェクトをポピュレートする。] [0089] ナビゲータは、今度はそのバッファからトークン7−20を一つずつインスタンス化マネージャに渡す。インスタンス化マネージャは、Cityオブジェクトがすでに構成されているので、実質的にトークン7−20に応じる動作をまったく起こさない。ナビゲータは、そのバッファ内のすべてのトークン(すなわち、トークン1−20)を再生したので、これ以上トークンをバッファリングせずに、リーダから新しいトークンを得る生のモードに入る。] [0090] ナビゲータは、リーダがビットストリーム内の次のトークンを渡すことを要求する。リーダは、トークン21EndElement: x:ConstructorArgumentsをナビゲータに渡す。ナビゲータは、トークンストリーム内に現在ブックマークがない生のモードである。従って、トークン21をバッファリングする必要はない。その代わりに、ナビゲータは、トークン21をバッファリングせずにインスタンス化マネージャに渡す。インスタンス化マネージャは、Monsterオブジェクトのコンストラクタ引数が完了したことに気付く。] [0091] リーダは、トークン22StartElement: Monster.SkinColorをナビゲータに渡し、ナビゲータは、バッファリングせずにインスタンス化マネージャに転送する。インスタンス化マネージャは、MonsterオブジェクトのSkinColorプロパティに値を書き込む準備をする。] [0092] リーダは、トークン23Text: Greenをナビゲータに渡し、ナビゲータは、バッファリングせずにインスタンス化マネージャに転送する。インスタンス化マネージャは、MonsterオブジェクトのSkinColorプロパティに値“Green”を書き込む。] [0093] リーダは、トークン24EndElement: Monster.SkinColorをナビゲータに渡し、ナビゲータは、バッファリングせずにインスタンス化マネージャに転送する。インスタンス化マネージャは、SkinColorプロパティへの値書き込む動作が完了したことに気付く。] [0094] リーダは、トークン25EndElement: Monsterをナビゲータに渡し、ナビゲータは、バッファリングせずにインスタンス化マネージャに転送する。インスタンス化マネージャは、Monsterオブジェクトの生成が完了したことに気付く。インスタンス化マネージャも、トークンストリームのすべてのインスタンス化命令に対応して完了する。] [0095] 一部のバッファリングが行われたが、バッファリングは、トークンストリーム内のすべてのトークンの数よりも少なかった。本明細書で説明した実施形態を用いて、トークンストリームが、インスタンス化マネージャが通常認識している特定のインスタンス化トークンを処理する方法で書かれていなくても、すべてのトークンストリームのほんの一部をバッファリングしながら一部のトークンストリームを評価することができる。従って、トークンストリームの構造的要件を特に要求することなく、トークンストリームに基づくインスタンス化要求のバッファリングが低減される。] [0096] 本発明を、その趣旨または不可欠な特性から逸脱せずに他の特定の様式で実装できる。説明した実施形態は、すべての点において、限定するものではなく例として見なされるべきである。従って本発明の範囲は、前述の説明よりはむしろ特許請求の範囲の記載によって示される。特許請求の範囲の意味および同等の範囲に当てはまるすべての変更は、それらの範囲内に含められる。]
权利要求:
請求項1 ストリーミングトークンのセット(203)をインスタンス化マネージャ(213)に渡すストリーミングトークンのナビゲータ(212)に関する方法であって、前記ストリーミングトークンのセットは、一群のインスタンス化命令を表し、インスタンス化命令を表す特定のトークンを受信する(303)ナビゲータの動作と、前記特定のトークンを前記インスタンス化マネージャに最初に渡す(動作306)ナビゲータの動作と、前記インスタンス化マネージャからの、前記特定のトークンにおいて前記ストリーミングトークンのセットをブックマークする要求を受信する(401)ナビゲータの動作であって、前記ブックマークは、前記ナビゲータが少なくとも前記特定のトークンから開始される前記ストリーミングデータのセットをバッファリングすることを示す動作と、前記ストリーミングトークンのセットの1または複数の後続のトークンを受信する(303)ナビゲータの動作と、前記特定のトークンおよび前記1または複数の後続のトークンをバッファリングする(305)ナビゲータの動作と、前記1または複数の後続のトークンを前記インスタンス化マネージャに最初に渡す(306)ナビゲータの動作と、前記ナビゲータが前記1または複数の後続のトークンを前記インスタンス化マネージャに渡した後、前記インスタンス化マネージャからの、前記特定のトークンから開始される前記ストリーミングトークンのセットを再生する要求を受信する(501)ナビゲータの動作と、前記インスタンス化マネージャからの再生の要求に応じて、前記特定のトークンおよび前記1または複数の後続のトークンを、前記ストリーミングトークンのセットにおいてそれらを適切に順序付けて前記インスタンス化マネージャに対して再生する(502)ナビゲータの動作と、を備えることを特徴とする方法。 請求項2 前記特定のトークンは、前記ストリーミングトークンのセットの第1トークンであることを特徴とする請求項1に記載の方法。 請求項3 前記特定のトークンは、前記ストリーミングトークンのセットの中間トークンであることを特徴とする請求項1に記載の方法。 請求項4 前記特定のトークンを前記インスタンス化マネージャに最初に渡すナビゲータの動作の前に、先行するトークンを前記ストリーミングトークンのセット内で受信するナビゲータの動作と、前記先行するトークンを前記インスタンス化マネージャに最初に渡すナビゲータの動作と、前記インスタンス化マネージャからの、前記先行するトークンにおいて前記ストリーミングデータのセットをブックマークする要求を受信するナビゲータの動作であって、前記ブックマークは、ナビゲータが少なくとも前記先行するトークンから開始されてバッファリングすることを示す動作と、前記先行するトークン、および、トークンの前記ストリーム内で前記先行するトークンと前記特定のトークンとの間に介在する任意のトークンをバッファリングするナビゲータの動作とをさらに備えることを特徴とする請求項3に記載の方法。 請求項5 前記特定のトークンおよび前記1または複数の後続のトークンを再生するナビゲータの動作の後に、前記インスタンス化マネージャからの、前記先行するトークンから開始される前記ストリーミングトークンのセットを再生する要求を受信するナビゲータの動作と、前記インスタンス化マネージャからの、前記先行するトークンから開始される前記ストリーミングトークンのセットを再生する前記要求に応じて、前記先行するトークン、前記先行するトークンと前記特定のトークンとの間に介在する任意のトークン、前記特定のトークン、および前記1または複数の後続のトークンを前記インスタンス化マネージャに対して再生するナビゲータの動作と、をさらに備えることを特徴とする請求項4に記載の方法。 請求項6 前記先行するトークンから開始される前記ストリーミングトークンのセットを再生する動作の後および/または同時に、前記先行するトークン、前記先行するトークンと前記特定のトークンとの間に介在する任意のトークン、前記特定のトークン、および前記1または複数の後続のトークンが含まれたバッファを解放する動作をさらに備えることを特徴とする請求項5に記載の方法。 請求項7 前記特定のトークンから開始される前記ストリーミングトークンのセットを再生する動作の後および/または同時に、前記先行するトークン、前記先行するトークンと前記特定のトークンとの間に介在する任意のトークン、前記特定のトークン、および前記1または複数の後続のトークンが含まれたバッファを解放する動作をさらに備えることを特徴とする請求項1に記載の方法。 請求項8 トークンのストリーミング時にトークンのセットを受信するナビゲータ(212)から、前記トークンのセット(203)を受信するインスタンス化マネージャ(213)に関する方法であって、前記トークンのセットは、一群のインスタンス化命令を表し、トークンのストリーミング時に前記トークンのセットを受信するように構成されたナビゲータから前記トークンのセットの特定のトークンを受信する(601)インスタンス化マネージャの動作であって、前記特定のトークンは、インスタンス化命令を表す動作と、前記インスタンス化マネージャが、前記特定のトークンによって表されたインスタンス化命令に対してまだ動作することができないと判断する(602)インスタンス化マネージャの動作と、前記ナビゲータに前記特定のトークンにおいて前記トークンのセットをブックマークするように命令する(603)インスタンス化マネージャの動作と、前記ナビゲータから前記トークンのセットの1または複数の後続のトークンを受信する(601)インスタンス化マネージャの動作と、前記1または複数の後続のトークンの最後のトークンが、前記インスタンス化マネージャに、前記特定のトークンによって表されたインスタンス化命令に対して動作することを可能にすると判断する(602、603、605)動作と、前記特定のブックマークされたトークンから開始される前記トークンのセットを再生する(606)動作と、を備えることを特徴とする方法。 請求項9 前記トークンのセット内の各トークンは、マークアップ言語文書の一部を備えることを特徴とする請求項8に記載の方法。 請求項10 前記特定のトークンは、特定のクラスのオブジェクトをインスタンス化する命令を表し、前記インスタンス化マネージャが前記特定のトークンによって表された前記インスタンス化命令に対してまだ動作することができないと判断するインスタンス化マネージャの前記動作は、前記特定のクラスのオブジェクトを割り当てることができる前に必要な1または複数の情報項目があると判断する動作を備えることを特徴とする請求項8に記載の方法。 請求項11 前記特定のクラスは標準クラスであり、前記1または複数の情報項目は、少なくとも前記標準クラスの固有のクラスが識別されることを可能にする型引数を備えることを特徴とする請求項10に記載の方法。 請求項12 前記1または複数の情報項目は、少なくとも1または複数のコンストラクタ引数を備えることを特徴とする請求項10に記載の方法。 請求項13 前記ストリーミングトークンの各セットはインスタンス化のコンテキストを表すが、前記ストリーミングトークンのすべてのセットがインスタンス化命令を表すわけではないことを特徴とする請求項8に記載の方法。 請求項14 前記特定のブックマークされたトークンから開始される前記トークンのセットを再生する動作は、前記ナビゲータに前記特定のトークンから開始される前記トークンのセットを再生するように命令するインスタンス化マネージャの動作と、前記特定のトークンから開始される前記トークンのセットの再生を前記ナビゲータから受信するインスタンス化マネージャの動作と、前記インスタンス化マネージャが前記特定のトークンから開始される前記トークンのセットの再生を受信すると、前記ナビゲータから受信したインスタンス化命令に従うインスタンス化マネージャの動作とを備えることを特徴とする請求項8に記載の方法。 請求項15 前記ナビゲータは、すべての前記トークンのセットよりも少ない数をバッファリングすることを特徴とする請求項8に記載の方法。 請求項16 1または複数のコンピュータ可読媒体を備えるコンピュータプログラム製品(104)であって、コンピュータシステム(100)の1または複数のプロセッサ(102)によって実行されると、前記コンピュータシステムにナビゲータ(212)およびインスタンス化マネージャ(213)をインスタンス化させるコンピュータ実行可能命令をその媒体上に有し、前記ナビゲータは、ストリーミングトークンのセット(112)を受信して、前記ストリーミングトークンのセット(203)を前記インスタンス化マネージャに渡すように構成され、さらに、前記ストリーミングトークンのセットをストリーミングロケーションのセットの中にブックマークするように構成され、さらに、ブックマークから開始される前記ストリーミングトークンのセットを再生するように構成され、前記インスタンス化マネージャは、前記ナビゲータから受信した各トークンに対して、前記受信したトークンによって表されたインスタンス化命令を現在実行できるか否かを判断する(602)こと、前記インスタンス化命令を現在実行できる場合、前記インスタンス化命令を実行する(603)こと、前記インスタンス化命令を現在実行できない場合、前記ナビゲータに前記トークンをブックマークするように命令(608)し、前記ナビゲータに前記ブックマークされたトークンによって表された前記インスタンス化命令を実行することを可能にする後続のトークンを受信する(602)と、前記ブックマークされたトークンによって表された前記インスタンス化命令を実行(603)して、前記ストリーミングトークンのセット内で前記後続のトークンを再生する(606)こと、を行うように構成されることを特徴とするコンピュータプログラム製品。 請求項17 前記1または複数のコンピュータ可読媒体は、物理メモリおよび/または記憶媒体であることを特徴とする請求項16に記載のコンピュータプログラム製品。 請求項18 前記ナビゲータは、前記インスタンス化マネージャからのブックマーク命令に応じて、バッファを制御して、前記トークンのセットのすべてのトークンよりも少ない数でバッファリングできるようにさらに構成されることを特徴とする請求項16に記載のコンピュータプログラム製品。 請求項19 前記インスタンス化マネージャは、一群のクラス定義にアクセスできることを特徴とする請求項16に記載のコンピュータプログラム製品。 請求項20 前記コンピュータ可読媒体は、その媒体上に前記クラス定義をさらに有することを特徴とする請求項16に記載のコンピュータプログラム製品。
类似技术:
公开号 | 公开日 | 专利标题 JP6621543B2|2019-12-18|Automatic update of hybrid applications US20160371117A1|2016-12-22|Composing and executing workflows made up of functional pluggable building blocks US8738884B2|2014-05-27|Efficient loading of data into memory of a computing system CA2802746C|2014-08-19|System and methods for facilitating the synchronization of data CN105474200B|2019-01-22|具有占位符的水合和脱水 Pike et al.1995|Plan 9 from bell labs US9002802B2|2015-04-07|High throughput, reliable replication of transformed data in information systems US7290008B2|2007-10-30|Method to extend a uniform resource identifier to encode resource identifiers Lam et al.2008|XML document parsing: Operational and performance characteristics EP1559035B1|2006-12-06|Scalable access to data in an arbitrarily large document CN1811765B|2010-10-13|文字处理应用程序中的数据绑定 US7240346B2|2007-07-03|Method and system for accessing drawing resources KR101130397B1|2012-03-27|포맷된 문서를 웹 페이지로 변환하는 시스템 및 방법 KR101038896B1|2011-06-07|서비스 프로그램을 생성하는 시스템, 방법 및 서비스 프로그램을 생성하기 위한 프로그램을 기록한 컴퓨터 판독가능 매체 US8639492B2|2014-01-28|Accelerated execution for emulated environments JP4406609B2|2010-02-03|単一のインターフェイスからのデータの多重階層を管理するための手法 JP5651238B2|2015-01-07|ハイブリッド・メモリ・サーバにおけるデータ・アクセス管理 CN101650660B|2014-05-07|从中央存储装置引导计算机系统 US7979801B2|2011-07-12|Media presentation driven by meta-data events JP2016500190A|2016-01-07|情報提示方法、装置、プログラム、及び記録媒体 CN104731921B|2018-03-30|Hadoop分布式文件系统针对日志型小文件的存储和处理方法 US6898607B2|2005-05-24|Proposed syntax for a synchronized commands execution KR101213884B1|2012-12-18|런타임 타입 추론을 통한 효율적인 데이터 액세스 Sabbouh et al.2007|Web mashup scripting language US9456229B2|2016-09-27|Parsing single source content for multi-channel publishing
同族专利:
公开号 | 公开日 JP4976561B2|2012-07-18| CN101925889B|2012-10-10| US20090193136A1|2009-07-30| EP2248036A4|2011-12-21| WO2009094097A2|2009-07-30| US7979566B2|2011-07-12| EP2248036A2|2010-11-10| CN101925889A|2010-12-22| WO2009094097A3|2009-09-17|
引用文献:
公开号 | 申请日 | 公开日 | 申请人 | 专利标题
法律状态:
2011-12-03| A621| Written request for application examination|Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20111202 | 2011-12-03| A521| Written amendment|Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20111202 | 2012-02-03| A871| Explanation of circumstances concerning accelerated examination|Free format text: JAPANESE INTERMEDIATE CODE: A871 Effective date: 20120202 | 2012-02-21| A975| Report on accelerated examination|Free format text: JAPANESE INTERMEDIATE CODE: A971005 Effective date: 20120220 | 2012-03-07| TRDD| Decision of grant or rejection written| 2012-03-14| A01| Written decision to grant a patent or to grant a registration (utility model)|Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20120313 | 2012-03-15| A01| Written decision to grant a patent or to grant a registration (utility model)|Free format text: JAPANESE INTERMEDIATE CODE: A01 | 2012-04-19| A61| First payment of annual fees (during grant procedure)|Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20120412 | 2012-04-20| R150| Certificate of patent or registration of utility model|Free format text: JAPANESE INTERMEDIATE CODE: R150 | 2012-04-23| FPAY| Renewal fee payment (event date is renewal date of database)|Free format text: PAYMENT UNTIL: 20150420 Year of fee payment: 3 | 2015-03-31| R250| Receipt of annual fees|Free format text: JAPANESE INTERMEDIATE CODE: R250 | 2015-04-14| S111| Request for change of ownership or part of ownership|Free format text: JAPANESE INTERMEDIATE CODE: R313113 | 2015-04-22| R350| Written notification of registration of transfer|Free format text: JAPANESE INTERMEDIATE CODE: R350 | 2016-04-12| R250| Receipt of annual fees|Free format text: JAPANESE INTERMEDIATE CODE: R250 | 2017-04-11| R250| Receipt of annual fees|Free format text: JAPANESE INTERMEDIATE CODE: R250 | 2018-04-20| LAPS| Cancellation because of no payment of annual fees|
优先权:
[返回顶部]
申请号 | 申请日 | 专利标题 相关专利
Sulfonates, polymers, resist compositions and patterning process
Washing machine
Washing machine
Device for fixture finishing and tension adjusting of membrane
Structure for Equipping Band in a Plane Cathode Ray Tube
Process for preparation of 7 alpha-carboxyl 9, 11-epoxy steroids and intermediates useful therein an
国家/地区
|